/**
 * @file client.h 客户端头文件
 *       用于定义客户端函数和全局变量
 *       包含了客户端登录、注册、聊天等功能
 * @author pzk (1528089905@qq.com)
 * @brief 
 * @version 1.5
 * @date 2025-8-25
 * 
 * @copyright copyright (c) 2025
 */
#ifndef CLIENT_H
#define CLIENT_H

#include "comm.h"
#include <ctype.h>
#include <termios.h>
#include <errno.h>

//全局变量
extern int client_sock;             // 客户端套接字
extern int current_user_id;         // 当前用户ID
extern char current_username[32];   // 当前用户名
extern char server_ip[16];         // 服务器IP地址
extern int server_port;              // 服务器端口号

/**
 * @brief 无回显模式函数
 *        设置终端为无回显模式
 * @param NULL
 * 
 * @return 无
 */
void enable_raw_mode();

/**
 * @brief 恢复终端模式函数
 *        用于恢复终端到原始状态
 * @param NULL
 * 
 * @return 无
 */
void disable_raw_mode();

/**
 * @brief 读取密码函数
 *        用于登录时输入密码，** 号代替输入字符
 * 
 * @param password 存储密码的缓冲区
 * @param max_len  最大长度
 * 
 * @return 无
 */
void read_password(char *password, int max_len);

/**
 * @brief 清空输入缓冲区函数
 * 
 * @param NULL
 * 
 * @return 无
 */
void clear_input_buffer();

/**
 * @brief 错误提示函数
 * @param NULL
 * 
 * @return 无
 */
void Error_prompt();

/**
 * @brief 重新连接到服务器
 * 
 * @param NULL
 * 
 * @return int 成功返回0，失败返回-1
 */
int connect_to_server();

/**
 * @brief 登陆选择主界面
 *        可以输入1-4选择
 *        1.管理登陆 2.用户登陆 3.注册 4.退出
 * @param NULL
 * 
 * @return 无
 */
void Login_main_menu();

/**
 * @brief 用户注册菜单
 *        可以输入数据并验证，传给服务端添加进链表
 * @param NULL
 * 
 * @return 无
 */
void Register_menu();

/**
 * @brief 管理员登录界面
 *        输入账号密码与公共头文件中的账号密码对比
 * @param NULL
 * 
 * @return 无
 */
void Alogin_menu();

/**
 * @brief 管理员菜单界面
 *        可以输入0-4选择
 *        1.添加用户 2.删除用户 3.查找用户 4.显示用户列表 0.退出
 * @param NULL
 * 
 * @return 无
 */
void Admin_main_menu();

/**
 * @brief 显示用户列表界面
 *        可以输入0-2选择，发送请求给服务端
 *        排序之后显示用户各项信息列表
 *        1.按ID排序 2.按用户名排序 0.退出
 * @param NULL
 * 
 * @return 无
 */
void Show_user_menu();

/**
 * @brief 添加用户界面
 *        可以输入数据并验证，传给服务端添加进链表
 * @param NULL
 * 
 * @return 无
 */
void Add_user_menu();

/**
 * @brief 查找用户界面
 *        可以输入0-3选择，发送请求给服务端
 *        查找到后显示用户各项信息列表
 *        1.按ID查找 2.按用户名查找 3.按手机号查找 0.退出
 * @param NULL
 * 
 * @return 无
 */
void Find_user_menu();

/**
 * @brief 删除用户界面
 *        可以输入0-3选择，发送请删除求给服务端
 *        1.按用户名删除 2.按ID删除 3.按手机号删除 0.退出
 * @param NULL
 * 
 * @return 无
 */
void Delete_user_menu();

/**
 * @brief 登录响应辅助函数
 *          根据响应码执行相应操作
 * @param response 响应码
 * 
 * @return 无
 */
void handle_login_response(const char *response);

/**
 * @brief 用户登录界面
 *         输入账号密码传给服务端验证
 * @param NULL
 * 
 * @return 无
 */
void Ulogin_menu();

/**
 * @brief 用户菜单界面
 *        显示用户菜单，并根据用户输入执行相应的操作
 *        1. 显示在线用户 2. 私聊  0. 退出
 * @param NULL
 * 
 * @return 无
 */
void User_main_menu();

/**
 * @brief 显示在线用户列表菜单
 *          发送获取在线用户请求,接收在线链表内容
 * @param NULL
 * 
 * @return 无
 */
void Show_online_menu();       // 查看在线用户

/**
 * @brief 用户私聊界面
 *        输入目标用户ID，向服务端发起请求
 *        接收服务端响应（接受，拒绝，退出等）
 * @param NULL
 * 
 * @return 无
 */
void Private_chat_menu();  

/**
 * @brief 与指定用户进行私聊
 *        发送私聊请求，等待对方响应，进入私聊会话，发送和接收消息
 * @param target_id 目标用户ID
 * @param target_name 目标用户名
 * 
 * @return 无
 */
void Private_chat_with(int target_id, const char *target_name);
        

//未完成
void Group_chat_menu();          
void Friend_chat_menu();            
void Add_friend_menu();             


#endif //CLIENT_H